package app;

/**
 *
 * @author Julio
 */
public class Code {

    //palavras reservadas
    public static final int 
            PROGRAM = 1,
            VAR = 2,
            INTEGER = 3,
            REAL = 4,
            BOOLEAN = 5,
            PROCEDURE = 6,
            BEGIN = 7,
            END = 8,
            IF = 9,
            THEN = 10,
            ELSE = 11,
            WHILE = 12,
            DO = 13;
    
    //identificador
    public static final int
            ID = 14;
    
    //numeros interiros
    public static final int
            INTEIRO = 15;
    
    //numeros reais
    public static final int
            REAIS = 16;
    
    //delimitadores
    public static final int
            PONTO_E_VIRGULA = 17,
            PONTO_FINAL = 18,
            DOIS_PONTOS = 19,
            ABRE_PARENTESES = 20,
            FECHA_PARENTESES = 21;
    
    //comando de atribuição
    public static final int
            ATRIBUICAO = 22;
    
    //operadores relacioais
    public static final int
            IGUAL = 23,
            MAIOR_QUE = 24,
            MENOR_QUE = 25,
            MAIOR_IGUAL = 26,
            MENOR_IGUAL = 27,
            DIFERENTE = 28;
    
    //operadores aditivos
    public static final int
            ADICAO = 29,
            SUBTRACAO = 30,
            OR = 31;
            
    //operadores multiplicativos
    public static final int
            MULTIPLICACAO = 32,
            DIVISAO = 33,
            AND = 34;
    
    //comentarios
    public static final int
            ABRE_COMENTARIO = 35,
            FECHA_COMENTARIO = 36;
    
    //caractere nao pertencente a linguagem
    public static final int 
            ERRO = 37;
    
    //delimitador
    public static final int 
            VIRGULA = 38;
    
    //booleanos
    public static final int 
            TRUE  = 39,
            FALSE = 40;
    
    //negacao
    public static final int 
            NOT  = 41;
    
    
    public static boolean isPalavraReservada(int code){
        return (code >= 1 && code <= 13);
    }
          
    public static boolean isID(int code){
        return (code == 14);
    }
            
    public static boolean isInteiro(int code){
        return (code == 15);
    } 
    
    public static boolean isReal(int code){
        return (code == 16);
    }
            
    public static boolean isDelimitador(int code){
        return (code >= 17 && code <= 21);
    }
            
    public static boolean isAtribuicao(int code){
        return (code == 22);
    }        
    
    public static boolean isRelacionais(int code){
        return (code >= 23 && code <= 28);
    }
            
    public static boolean isAditivos(int code){
        return (code >= 29 && code <= 31);
    }
            
    public static boolean isMultiplicativos(int code){
        return (code >= 32 && code <= 34);
    }
    
    public static boolean isComentario(int code){
        return (code >= 35 && code <= 36);
    }
    
    public static boolean isBooleano(int code){
        return (code >= 39 && code <= 40);
    }
    
    public static boolean isNegacao(int code){
        return (code == 41);
    }
    
    public static String getRealDescrition(int code){
        switch(code){
            case PROGRAM:          return "program";
            case VAR:              return "var";
            case INTEGER:          return "integer";
            case REAL:             return "real";
            case BOOLEAN:          return "boolean";
            case PROCEDURE:        return "procedure";
            case BEGIN:            return "begin";
            case END:              return "end";
            case IF:               return "if";
            case THEN:             return "then";
            case ELSE:             return "else";
            case WHILE:            return "while";
            case DO:               return "do";
            case ID:               return "ID";
            case INTEIRO:          return "num_inteiro";
            case REAIS:            return "num_real";
            case PONTO_E_VIRGULA:  return ";";
            case PONTO_FINAL:      return ".";
            case DOIS_PONTOS:      return ":";
            case ABRE_PARENTESES:  return "(";
            case FECHA_PARENTESES: return ")";
            case ATRIBUICAO:       return ":=";
            case IGUAL:            return "=";
            case MAIOR_QUE:        return ">";
            case MENOR_QUE:        return "<";
            case MAIOR_IGUAL:      return ">=";
            case MENOR_IGUAL:      return "<=";
            case DIFERENTE:        return "<>";
            case ADICAO:           return "+";
            case SUBTRACAO:        return "-";
            case OR:               return "or";
            case MULTIPLICACAO:    return "*";
            case DIVISAO:          return "/";
            case AND:              return "and";
            case ABRE_COMENTARIO:  return "{";
            case FECHA_COMENTARIO: return "}";
            case VIRGULA:          return ",";
            case ERRO:             return "ERRO";
            case TRUE:             return "true";
            case FALSE:            return "false";
            case NOT:              return "not";
            
            default:               return "ERRO";
        }
    }
    
    public static String getGenericDescrition(int code){
        switch(code){
            case PROGRAM:          return "Palavra reservada";
            case VAR:              return "Palavra reservada";
            case INTEGER:          return "Palavra reservada";
            case REAL:             return "Palavra reservada";
            case BOOLEAN:          return "Palavra reservada";
            case PROCEDURE:        return "Palavra reservada";
            case BEGIN:            return "Palavra reservada";
            case END:              return "Palavra reservada";
            case IF:               return "Palavra reservada";
            case THEN:             return "Palavra reservada";
            case ELSE:             return "Palavra reservada";
            case WHILE:            return "Palavra reservada";
            case DO:               return "Palavra reservada";
            case INTEIRO:          return "Numero inteiro";
            case REAIS:            return "Numero real";
            case ID:               return "Identificador";
            case PONTO_E_VIRGULA:  return "Delimitador";
            case PONTO_FINAL:      return "Delimitador";
            case DOIS_PONTOS:      return "Delimitador";
            case ABRE_PARENTESES:  return "Delimitador";
            case FECHA_PARENTESES: return "Delimitador";
            case ATRIBUICAO:       return "Comando de atribuicao";
            case IGUAL:            return "Operador relacional";
            case MAIOR_QUE:        return "Operador relacional";
            case MENOR_QUE:        return "Operador relacional";
            case MAIOR_IGUAL:      return "Operador relacional";
            case MENOR_IGUAL:      return "Operador relacional";
            case DIFERENTE:        return "Operador relacional";
            case ADICAO:           return "Operador aditivo";
            case SUBTRACAO:        return "Operador aditivo";
            case AND:              return "Operador aditivo";
            case OR:               return "Operador multiplicativo";
            case MULTIPLICACAO:    return "Operador multiplicativo";
            case DIVISAO:          return "Operador multiplicativo";
            case VIRGULA:          return "Delimitador";
            case TRUE:             return "booleano";
            case FALSE:            return "booleano";
            case NOT:              return "booleano";
                       
            default: return "ERRO";
        }
    }
}
